package com.chinaunicom.structure.proxy.dynamicproxy.jdk;

import java.lang.reflect.Proxy;

/**
 * @author liry
 * @version 1.0
 * @date Created on 2022/8/9 10:22
 * Description: 代理工厂
 */
public class ProxyFactory {
    // 定义目标对象
    private Person person;

    public ProxyFactory(Person person) {
        this.person = person;
    }

    public Object getProxyInstance() {
        /**
         * 创建代理对象
         * ClassLoader loader : 当前目标对象的类加载器 
         * Class<?>[] interfaces : 当前目标对象所实现的接口类型
         * InvocationHandler h : 回调处理器，当执行目标方法时，会回调处理器中的方法；
         */
        
        return Proxy.newProxyInstance(this.person.getClass().getClassLoader(), this.person.getClass().getInterfaces(), new CustomInvocationHandler(this.person));
    }
}
